var store_organizacion;
var store_cuenta;
var store_editor;
var store_tipo;

Ext.onReady(function()
{
    store_organizacion = new X.store.Json({
    url:'/organizaciones/ajax-listar-proveedor',
    fields : [
    'codigoOrganizacion',
    'razonSocial'
    ]
    });

    store_cuenta = new X.store.Json({
    fields : [
    'codigoCuenta',
    'nombreRubro',
    'codigo',
    'valueField'
    ]
    });

    store_cuenta.addListener('load', function(store, records, options){
    for(var i=0; i<store.getCount(); i++){
    var record = store.getAt(i);
    record.set('valueField', record.get('codigo') + ' ' + record.get('nombreRubro'));
    }
    });

    store_editor = new X.store.Json({
    fields : [
    'cantidad',
    'concepto',
    'monto',
    'observaciones',
    'codigoCuenta'
    ]
    });

    store_tipo = new X.store.Json({
    fields : [
    'codigoDocumento',
    'nombreDocumento'
    ]
    });

    var combo = new X.field.Combo ({
    valueField : 'codigoCuenta',
    displayField : 'valueField',
    width : 230,
    store : store_cuenta,
    editable : true
    });

    var grid = new X.grid.GridEditor({

    id : 'editor',
    height : 250,
    width : 1008,
    store : store_editor,

    columns:[
    new X.column.Number({header: 'Cantidad', dataIndex: 'cantidad', width: 57, editor: new X.field.Number({allowNegative:false, allowDecimals:false})}),
    new X.column.Combo ({header: 'Rubro', dataIndex: 'codigoCuenta', width: 340, editor: combo}),
    new X.column.Text ({header: 'Concepto', dataIndex: 'concepto', width: 250, editor: new X.field.Text()}),
    new X.column.Money ({header: 'Monto', dataIndex: 'monto', width: 90, editor: new X.field.Number({allowNegative:false, allowDecimals:false})}),
    new X.column.Text ({header: 'Observaciones', dataIndex: 'observaciones', width: 250, editor: new X.field.Text()})

    ]
    });

    grid.addListener('afteredit', function(e){
    e.record.commit();
    });

    // form invisible para hacer el submit desde el campo fechaComprobante
    var formSubmitCuenta = new Ext.form.FormPanel({
    renderTo : 'layout_content',
    hidden : true
    });

    function actualizar_cuentas(){

    formSubmitCuenta.getForm().submit({
    url : '/egresocc/ajax-cuenta',
    waitTitle : 'Aguarde un momento.',
    waitMsg : 'Cargando las cuentas asociadas a la fecha del comprobante...',
    params : {
    fecha : Ext.getCmp('fechaComprobante').getValue()
    },

    success : function(form, action){
    try{
    if (action.result.msg){
    store_cuenta.setJson(action.result.msg);

    // eliminar las inconsistencias
    for (var i=0; i<store_editor.getCount(); i++){
    var re = store_editor.getAt(i);
    var ok = false;

    for (var j=0; j<store_cuenta.getCount(); j++){
    var rc = store_cuenta.getAt(j);

    if (re.get('codigoCuenta') == rc.get('codigoCuenta')){
    ok = true;
    break;
    }
    }
    if (ok == false){
    re.set('codigoCuenta', null);
    re.commit();
    }
    }
    }
    }
    catch(e){X.msg.FailureJs(e.message);}
    },
    failure : function(form, action){
    try{
    if (action.failureType === Ext.form.Action.SERVER_INVALID){
    X.msg.Failure(action.result.msg);
    }
    else X.msg.Failure('respuesta inválida del servidor');
    }
    catch(e){X.msg.FailureJs(e.message);}
    }
    });
    }

    var form = new X.form.FormPanel({

    title : 'Crear Egreso de Caja Chica',
    submitButtonText : 'Crear',
    returnButtonText : 'Cancelar',
    submitUrl : '/egresocc/ajax-crear',
    returnUrl : '/egresocc/crear',
    width : 1080,
    labelWidth : 130,
    monitorValid : false,

    items:[
    new Ext.form.FieldSet({title:'Comprobante',layout:'absolute',height:140,items:
    [
    new Ext.form.Label({x:20,y:5,text:'Número:'}),
    new Ext.form.Label({x:20,y:30,text:'Fecha:'}),
    new Ext.form.Label({x:20,y:55,text:'Proveedor:'}),
    new Ext.form.Label({x:20,y:80,text:'Tipo:'}),


    new X.field.Hidden({id:'editorRows'}),
    new X.field.Number({x:120,y:5, id:'numeroComprobante', width:230, allowNegative:false, allowDecimals:false}),
    new X.field.Date ({x:120,y:30,id:'fechaComprobante', width:230,
    listeners:{
    change:function(field, newv, oldv){
    if (Ext.isEmpty(Ext.getCmp('fechaComprobante').getValue())){
    Ext.getCmp('fechaComprobante').setValue(oldv);
    }
    if (!Ext.getCmp('fechaComprobante').isValid()){
    Ext.getCmp('fechaComprobante').setValue(oldv);
    }
    if (newv.getFullYear() == oldv.getFullYear()) return;

    actualizar_cuentas();
    }
    }}),
    new X.field.Combo({x:120,y:55,
    id : 'organizacion',
    hiddenName : 'codigoOrganizacion',
    valueField : 'codigoOrganizacion',
    displayField : 'razonSocial',
    width : 230,
    store : store_organizacion,
    allowBlank : true
    }),
    new X.field.Combo ({x:120,y:80,
    id : 'tipo',
    hiddenName : 'codigoDocumento',
    valueField : 'codigoDocumento',
    displayField : 'nombreDocumento',
    width : 230,
    store : store_tipo,
    allowBlank : true
    }),
    new Ext.Button({
    x:360,y:56,width:120,
    text:'Agregar Proveedor',
    handler:crear_organizacion
    })
    ]}),
    new Ext.form.FieldSet({title:'Movimientos',items:
    [
    grid
    ]})
    ]
    });

    form.getForm().addListener('beforeaction', function(form, action){
    if (Ext.isEmpty(Ext.getCmp('numeroComprobante').getValue())){
    X.msg.Failure('Complete el campo "Número"'); return false;
    }
    if (Ext.isEmpty(Ext.getCmp('fechaComprobante').getValue())){
    X.msg.Failure('Complete el campo "Fecha"'); return false;
    }
    if (Ext.isEmpty(Ext.getCmp('organizacion').getValue())){
    X.msg.Failure('Complete el campo "Proveedor"'); return false;
    }
    if (Ext.isEmpty(Ext.getCmp('tipo').getValue())){
    X.msg.Failure('Complete el campo "Tipo"'); return false;
    }
    if (store_editor.getCount() <= 0){
    X.msg.Failure('Agregue al menos un movimiento'); return false;
    }
    for (var i=0; i<store_editor.getCount(); i++){
    var record = store_editor.getAt(i);
    /*if (Ext.isEmpty(record.get('cantidad'))){
    X.msg.Failure('El ' + (i+1) + '° movimiento tiene el campo "Cantidad" incompleto'); return false;
    }*/
    if (Ext.isEmpty(record.get('concepto'))){
    X.msg.Failure('El ' + (i+1) + '° movimiento tiene el campo "Concepto" incompleto'); return false;
    }
    if (Ext.isEmpty(record.get('monto'))){
    X.msg.Failure('El ' + (i+1) + '° movimiento tiene el campo "Monto" incompleto'); return false;
    }
    /*if (Ext.isEmpty(record.get('observaciones'))){
    X.msg.Failure('El ' + (i+1) + '° movimiento tiene el campo "Observaciones" incompleto'); return false;
    }*/
    if (Ext.isEmpty(record.get('codigoCuenta'))){
    X.msg.Failure('El ' + (i+1) + '° movimiento tiene el campo "Rubro" incompleto'); return false;
    }
    }
    return true;
    });

    var window_organizacion=null;
    var form_organizacioin;

    function crear_organizacion(){

    if (window_organizacion) return;

    form_organizacioin = new Ext.form.FormPanel({
        bodyStyle : 'padding:20px 20px 20px 20px;',
        style : 'margin:auto; textAlign:left;',
        frame : true,
        monitorValid : false,
        title : 'Crear Proveedor',
        labelWidth : 90,

        items:[
        new X.field.Text ({fieldLabel:'Razón social', id:'razon', width:200}),
        new X.field.Text ({fieldLabel:'RUC', id:'ruc', width:200}),
        new X.field.Hidden({id:'Tipo', value:'1'}),
        new X.field.Hidden({id:'Categoria', value:'1'}),
        new X.field.Hidden({id:'Frecuencia', value:'1'})
        ],
        buttons:[
        new Ext.Button({
        text : 'Crear',
        formBind : true,
        handler : submitFunction = function()
        {
        form_organizacioin.getForm().submit({
        url : '/organizaciones/ajax-crear',
        waitTitle : 'Aguarde un momento.',
        waitMsg : 'Cargando...',

        success : function(form, action){
        try{
        if (action.result.msg)
        X.msg.Success(action.result.msg);
        window_organizacion.close();
        store_organizacion.reload();
        } catch(e){ X.msg.FailureJs(e.message); }
        },
        failure : function(form, action){
        try{
        if (action.failureType === Ext.form.Action.SERVER_INVALID)
        X.msg.Failure(action.result.msg);
        else X.msg.Failure('respuesta inválida del servidor');
        } catch(e){ X.msg.FailureJs(e.message); }
        }
        });
        }
        }),
        new Ext.Button({
        text : 'Cancelar',
        handler : function(){
        window_organizacion.close();
        }
        })
        ]
    });

    form_organizacioin.getForm().addListener('beforeaction', function(form, action){
    if (Ext.isEmpty(Ext.getCmp('razon').getValue())){
    X.msg.Failure('Complete el campo "Razon Social"'); return false;
    }
    return true;
    });


    window_organizacion = new Ext.Window({
    resizable: false,
    width: 350,
    //closeAction: 'hide',
    modal : true,
    border: false,
    items: [form_organizacioin]
    });
    window_organizacion.addListener('beforedestroy',function(){
    window_organizacion=null;
    });
    window_organizacion.show();
    }

});
